10장. AI 엔지니어링 아키텍처와 사용자 피드백
출처 — Chip Huyen(지은이)·변성윤(옮긴이), 『AI 엔지니어링』(한빛미디어, 2025), 10장 (pp. 519~567). 원문 PDF
ai_engineering_final_v11_260909.pdf(2026-09-09 판)앞선 아홉 개 장에서 다룬 조정 기법(RAG·가드레일·라우팅·캐싱·파인튜닝·추론 최적화)을 하나의 제품으로 조립하는 방법과, 그 제품이 실제로 목표를 달성하는지 확인할 유일한 방법인 사용자 피드백을 설계·수집·해석하는 방법을 다룬다 — 이 책의 마지막 장이다.
학습 목표
이 장을 끝내면 다음을 할 수 있다.
- 가장 단순한 질의-응답 구조에서 컨텍스트 보강·가드레일·라우터/게이트웨이·캐시·에이전트 패턴까지 AI 애플리케이션 아키텍처가 단계적으로 확장되는 과정을 설명한다.
- 입력 가드레일과 출력 가드레일을 구분해 설계하고, 위반율과 거짓 거부율 사이의 트레이드오프를 판단한다.
- 완전 일치 캐싱과 시맨틱 캐싱의 적용 조건을 구분하고, 상황에 맞는 캐싱·제거 정책을 선택한다.
- 모니터링과 관찰 가능성의 차이를 구분하고, 실패 유형에 맞춰 지표·로그·트레이스·드리프트 감지를 설계한다.
- 명시적 피드백과 암시적 피드백을 구분해 수집 시스템을 설계하고, 피드백에 숨은 편향과 퇴화 피드백 루프의 위험을 식별한다.
전체 흐름도
[ 가장 단순한 아키텍처 ]
질의 ──▶ [ 모델 API ] ──▶ 응답 (컨텍스트 증강·가드레일·최적화 전혀 없음)
│
▼ 필요할 때마다 하나씩 추가(운영팀이 실제로 밟는 순서)
┌─────────────────────────────────────────┐
│ 1단계 — 컨텍스트 보강 │
│ 검색·도구 호출로 모델이 참고할 정보 확장 │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 2단계 — 가드레일 │
│ 입력(유출·공격 차단) + 출력(품질·보안 검사) │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 3단계 — 모델 라우터 + 게이트웨이 │
│ 의도별 분기 + 통합 인터페이스·접근제어·폴백 │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 4단계 — 캐시 │
│ 완전 일치 캐싱 + 시맨틱 캐싱 │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 5단계 — 에이전트 패턴 │
│ 루프(재검색)·병렬 실행·조건 분기·쓰기 작업 │
└─────────────────────────────────────────┘
│
▼
┌──────────────────────────┐ ┌──────────────────────────┐
│ 모니터링과 관찰 가능성 │──▶│ AI 파이프라인 오케스트레이션 │
│ 지표·로그·트레이스·드리프트 │ │ 구성 요소 정의 + 체이닝 │
└──────────────────────────┘ └──────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 사용자 피드백 │
│ 명시적(좋아요·별점) + 암시적(재생성·편집·이탈)│
└─────────────────────────────────────────┘
│
└──────────────▶ 8장 §5 데이터 플라이휠로 순환
(제품이 나아질수록 데이터가 쌓이고,
데이터가 쌓일수록 제품이 나아진다)
0. 용어 사전
참고 — 위쪽 4개는 이 장을 읽기 전에 알아야 하는 선행 용어다. 이 장은 앞선 아홉 개 장을 종합하는 마지막 장이라(
book_map.md「장 사이의 의존 관계」) 선행 용어를 이 책의 여러 장에서 가져왔다. 낯설면 해당 장을 먼저 보는 것이 좋다.
| 한글 용어 | 원문 영문명 | 의미 |
|---|---|---|
| 검색 증강 생성(RAG) | Retrieval-Augmented Generation | (선행) 외부 데이터 소스를 검색해 모델의 지시를 보완하는 기법. 도서관에서 책을 찾아 그 내용을 근거로 답하는 것과 같다 — 모델이 기억(가중치)만으로 답하지 않고 그때그때 자료를 찾아본다. 이 장 §1.1 컨텍스트 보강의 기반이다. 6장 §1 |
| 에이전트 | Agent | (선행) 환경을 인식하고 도구를 써서 그 환경에서 행동할 수 있는 시스템. 비서에게 심부름만 시키던 것에서 벗어나, 스스로 판단해 여러 단계를 밟고 필요하면 물건을 사거나 메일을 보내게 하는 것과 같다. 이 장 §1.5 에이전트 패턴 추가에서 쓰기 작업까지 다룬다. 6장 §5 |
| 탈옥·프롬프트 주입(프롬프트 해킹) | Jailbreak·Prompt Injection | (선행) 모델의 안전장치를 우회하거나 악성 지시를 프롬프트에 끼워 넣어 원치 않는 행동을 시키는 공격. 정문 경비를 속여 몰래 들여보내는 것과 같다. 이 장 §1.2 가드레일이 막아야 할 대상이다. 5장 §7 |
| 데이터 플라이휠 | Data Flywheel | (선행) 사용자가 만든 데이터로 제품을 계속 개선해, 그 개선이 다시 더 많은 사용자와 데이터를 끌어오는 선순환. 눈덩이가 굴러가며 커지는 것과 같다. 이 장 §2가 다루는 사용자 피드백이 이 플라이휠의 연료다. 8장 §5 |
| 컨텍스트 구성 | Context Construction | 검색·도구 호출로 모델에 필요한 정보를 채워 넣는 일. 전통적 ML의 특성 공학에 대응한다. §1.1 |
| 가드레일 | Guardrail | 시스템과 사용자를 위험에서 보호하는 장치. 입력 가드레일과 출력 가드레일로 나뉜다. §1.2 |
| 개인 식별 정보(PII) | Personally Identifiable Information | 주민번호·전화번호·계좌번호 등 개인을 특정할 수 있는 정보. §1.2 |
| 오거부율 | False Refusal Rate | 안전하게 답할 수 있는 요청인데도 모델이 거부하는 비율. 보안을 지나치게 강하게 걸면 이 비율이 올라가 사용성이 떨어진다. §1.2 |
| 스코어러 | Scorer | 생성 모델보다 작고 빠르게 출력의 품질·안전성을 평가하는 보조 모델. §1.2 |
| 라우터 | Router | 질의의 의도를 예측해 적절한 모델·솔루션으로 분기시키는 구성 요소. §1.3 |
| 의도 분류기 | Intent Classifier | 사용자가 무엇을 하려는지 예측해 라우팅에 쓰는 분류 모델. §1.3 |
| 다음 행동 예측기 | Next-Action Predictor | 에이전트가 다음에 어떤 도구·행동을 써야 할지 예측하는 라우터의 한 형태. §1.3 |
| 모델 게이트웨이 | Model Gateway | 여러 모델에 통합 인터페이스·접근 제어·비용 관리·폴백을 제공하는 중간 계층. §1.3 |
| 폴백 정책 | Fallback Policy | 주 모델이 실패하거나 한도를 넘었을 때 대체 모델로 넘기거나 재시도하는 정책. §1.3 |
| 완전 일치 캐싱 | Exact Caching | 정확히 같은 질의가 다시 들어올 때만 캐시된 응답을 재사용하는 방식. §1.4 |
| 시맨틱 캐싱 | Semantic Caching | 질의가 완전히 같지 않아도 의미가 비슷하면 캐시된 응답을 재사용하는 방식. §1.4 |
| 오케스트레이터 | Orchestrator | 여러 구성 요소의 상호작용 방식을 정의해 하나의 파이프라인으로 엮는 도구. §1.7 |
| 체이닝 | Chaining | 질의 처리부터 응답 반환까지의 단계들을 함수 조합처럼 연결하는 것. §1.7 |
| 관찰 가능성 | Observability | 시스템의 외부 출력만으로 내부에서 무엇이 잘못됐는지 추론할 수 있게 계측하는 것. §1.6 |
| 모니터링 | Monitoring | 시스템의 외부 출력을 지속적으로 관찰해 문제 발생 시점을 알아내는 활동. §1.6 |
| 평균 탐지 시간(MTTD) | Mean Time to Detection | 문제가 생긴 뒤 이를 감지하기까지 걸리는 평균 시간. §1.6 |
| 평균 응답 시간(MTTR) | Mean Time to Response | 문제를 감지한 뒤 해결하기까지 걸리는 평균 시간. §1.6 |
| 변경 실패율(CFR) | Change Failure Rate | 수정·롤백이 필요한 실패를 일으키는 배포의 비율. §1.6 |
| 드리프트 | Drift | 시스템 프롬프트·사용자 행동·기반 모델이 시간이 지나며 예고 없이 바뀌는 현상. §1.6 |
| 명시적 피드백 | Explicit Feedback | 좋아요·별점·설문처럼 사용자가 의식적으로 남기는 피드백. §2.1 |
| 암시적 피드백 | Implicit Feedback | 재생성·편집·이탈처럼 사용자의 행동에서 추론하는 피드백. §2.1 |
| 자연어 피드백 | Natural Language Feedback | 대화 내용 자체(오류 교정·불평·감정 표현)에서 추론하는 피드백. §2.1 |
| 선호도 데이터 | Preference Data | (질의, 선호 응답, 비선호 응답) 형태로 모델을 사람의 선호에 맞게 조정하는 데 쓰는 데이터. §2.1 |
| 퇴화 피드백 루프 | Degenerate Feedback Loop | 예측이 피드백에 영향을 주고 그 피드백이 다시 다음 모델에 영향을 주며 초기 편향이 점점 심해지는 현상. §2.3 |
1. AI 엔지니어링 아키텍처 — 가장 단순한 구조에서 시작하기
완전한 형태의 AI 아키텍처는 꽤 복잡해질 수 있다. 그래서 실제 운영 팀이 밟는 순서를 따라 가장 단순한 구조에서 시작해 필요할 때마다 구성 요소를 하나씩 더해간다. 가장 단순한 형태는 질의를 받아 그대로 모델 API로 보내고 응답을 돌려주는 것뿐이다 — 컨텍스트 증강도, 가드레일도, 최적화도 없다. 여기서 "모델 API"는 오픈AI·구글·앤트로픽 같은 서드파티 API와 자체 호스팅 모델을 모두 가리키며, 자체 호스팅 모델을 위한 추론 서버를 구축하는 방법은 9장(추론 최적화) — 추론 서비스 수준 최적화에서 이미 다룬 주제다.
이 단순한 출발점에서 다음 다섯 단계를 필요에 따라 순서대로(또는 자신의 상황에 가장 잘 맞는 순서로) 추가할 수 있다.
- 모델이 외부 데이터 소스·도구에 접근하게 해 컨텍스트를 보강한다.
- 시스템과 사용자를 보호하기 위해 가드레일을 도입한다.
- 복잡한 파이프라인을 지원하고 보안을 강화하기 위해 모델 라우터와 게이트웨이를 추가한다.
- 캐싱으로 지연 시간과 비용을 최적화한다.
- 시스템 성능을 극대화하기 위해 복잡한 로직과 실행 기능(에이전트 패턴)을 추가한다.
다섯 단계를 다 밟으면 아키텍처는 꽤 복잡해지고, 그만큼 실패 지점도 늘어난다. 그래서 이 복잡성을 다루는 모니터링·관찰 가능성(§1.6)을 품질 관리의 마지막 축으로 두고, 이 모든 구성 요소를 하나의 파이프라인으로 엮는 오케스트레이션(§1.7)을 그다음에 둔다. 다만 구성 요소들의 경계가 항상 뚜렷한 것은 아니다 — 예를 들어 가드레일은 추론 서비스 안에, 게이트웨이 안에, 또는 독립된 구성 요소로 각각 구현될 수 있다.
1.1 1단계 — 컨텍스트 보강
플랫폼을 처음 확장할 때는 보통 각 질의에 응답하는 데 필요한 정보를 시스템이 스스로 모을 수 있게 하는 메커니즘부터 추가한다. 텍스트 검색·이미지 검색·표 형태 데이터 검색 같은 다양한 검색 메커니즘(6장 §2 검색 알고리즘·6장 §4 텍스트를 넘어선 RAG)으로 컨텍스트를 구성할 수 있고, 웹 검색·뉴스·날씨·이벤트 API처럼 모델이 자동으로 정보를 수집하게 해주는 도구로도 컨텍스트를 보강할 수 있다.
컨텍스트 구성은 파운데이션 모델을 위한 특성 공학과 같다 — 모델이 좋은 출력을 내는 데 필요한 정보를 미리 채워주는 일이다. 이 역할이 시스템 품질에 핵심적이라 거의 모든 모델 API 제공업체가 파일 업로드·도구 사용 같은 형태로 이 기능을 지원한다. 다만 지원 방식은 제각각이다 — 업로드 가능한 문서의 유형·수에 제한이 있을 수 있고, 전문 RAG 솔루션은 벡터 데이터베이스 용량만큼 문서를 올릴 수 있지만 범용 모델 API는 몇 개로 제한할 수 있다. 검색 알고리즘·청크 크기 같은 검색 설정도, 병렬 도구 실행이나 장시간 작업 처리 가능 여부도 프레임워크마다 다르다.
1.2 2단계 — 가드레일
가드레일은 위험을 줄이고 시스템과 사용자를 보호하는 역할을 한다. 위험에 노출될 수 있는 모든 지점에 배치해야 하며, 일반적으로 입력 가드레일과 출력 가드레일로 나뉜다.
입력 가드레일은 크게 두 위험을 막는다. 첫째는 시스템을 망가뜨리는 악성 프롬프트다 — 공격자가 어떤 방법으로 애플리케이션을 악용하고 이를 어떻게 방어하는지는 이미 5장 §7 프롬프트 공격의 세 가지 유형·5장 §8 프롬프트 공격에 대한 방어에서 다뤘다. 둘째는 외부 API로의 개인정보 유출이다 — 직원이 회사 기밀을 프롬프트에 복사해 서드파티 API로 보내거나, 개발자가 내부 정책을 시스템 프롬프트에 넣거나, 도구가 내부 데이터베이스의 개인정보를 컨텍스트에 끌어오는 경우에 생긴다(삼성 직원이 챗GPT에 회사 기밀을 입력해 유출한 사례가 실제로 있었다). 서드파티 API를 쓰는 한 유출을 완벽히 막을 방법은 없지만, 민감 데이터(주민번호·전화번호·계좌번호, 얼굴, 기밀 키워드)를 자동 탐지하는 도구로 위험을 줄일 수 있다. 탐지되면 질의 전체를 차단하거나, 전화번호를 [전화번호] 같은 플레이스홀더로 마스킹한 뒤 응답에 그 플레이스홀더가 나타나면 PII 역방향 사전으로 원래 값을 되돌리는 방법을 쓴다.
출력 가드레일은 ① 출력 실패 탐지 ② 실패 유형별 정책 수립이라는 두 기능을 한다. 가장 알아채기 쉬운 실패는 빈 응답이다. 품질 실패(잘못된 형식의 응답·환각·전반적으로 낮은 품질)는 4장 §3 생성 능력 — 사실 일관성에서, 보안 실패(유해 콘텐츠·개인정보 노출·원격 코드 실행 유발·브랜드 위험)는 4장 §4 생성 능력 — 안전성에서 이미 다뤘다. 다만 보안을 재는 지표는 위반(공격 성공) 자체만이 아니라 오거부율도 함께 봐야 한다 — 지나치게 강하게 막으면 정당한 요청까지 거부해 사용자 경험을 해친다.
많은 실패는 재시도로 완화할 수 있다 — 모델은 확률적이라 같은 질의를 다시 보내면 다른 응답을 얻을 수 있고, 빈 응답이나 잘못된 형식이 나오면 정상적인 응답을 얻을 때까지 반복한다. 다만 재시도는 지연 시간·비용을 늘린다 — 순차 재시도는 사용자 체감 지연을 두 배로 만들 수 있으므로, 처음부터 같은 질의를 병렬로 두 번 보내고 더 나은 응답을 고르는 방식으로 지연 시간을 관리하기도 한다. 까다로운 요청은 사람에게 넘기는 것도 흔한 방법이다 — 특정 문구가 포함된 질의를 상담원에게 넘기거나, 감정 분석 모델이 분노를 감지하면 대화를 이관하거나, 대화가 같은 자리를 맴돌면 일정 턴 수 뒤 이관한다.
가드레일에는 트레이드오프가 따른다. 신뢰성과 지연 시간이 대표적이다 — 일부 팀은 지연 시간을 위해 가드레일 구현을 포기하기도 하는데, 그 결과로 쓰이는 스트림 완성 모드(토큰이 만들어지는 즉시 사용자에게 전달)에서는 부분 응답을 평가하기 어려워 출력 가드레일이 안전하지 않은 응답을 걸러내기 전에 그 응답이 이미 사용자에게 전달될 수 있다. 얼마나 많은 가드레일을 구현할지는 자체 호스팅 여부에도 좌우된다 — 서드파티 API는 제공업체가 기본 가드레일을 제공해 직접 구현할 부담이 줄고, 자체 호스팅은 요청을 외부로 보낼 필요가 없어 입력 가드레일의 필요성이 줄어든다. 바로 쓸 수 있는 가드레일 솔루션으로 메타의 PurpleLlama, 엔비디아의 NeMo Guardrails, 애저의 PyRIT·AI 콘텐츠 필터, 퍼스펙티브 API, 오픈AI의 콘텐츠 조정 API 등이 있으며, 입출력 위험이 겹치는 부분이 많아 대개 양쪽을 함께 보호하는 형태로 나온다. 이때 스코어러(평가기)는 생성 모델보다 작고 빠르지만 AI 기반인 경우가 많아, 모델 API 아래에 두거나 출력 가드레일 상자에 넣는 두 배치 모두 가능하다.
1.3 3단계 — 모델 라우터와 게이트웨이
애플리케이션이 더 많은 모델을 다루게 되면 여러 모델을 서빙하는 복잡성·비용을 관리하기 위해 라우터와 게이트웨이가 필요해진다.
라우터는 모든 질의에 하나의 모델만 쓰는 대신 질의 유형별로 다른 솔루션을 쓰게 해준다 — 기술 문제 해결에 특화된 모델과 요금 청구에 특화된 모델을 따로 두면 각각 범용 모델보다 성능이 좋을 수 있고, 단순한 질의를 저렴한 모델로 보내면 비용도 아낄 수 있다. 라우터는 보통 사용자의 의도를 예측하는 의도 분류기로 구성되며, 예측된 의도로 질의를 적절한 곳으로 보낸다(비밀번호 재설정 요청 → FAQ 안내, 청구서 오류 → 상담원 연결, 기술 문제 → 전용 챗봇). 의도 분류기는 범위 밖 질의를 걸러 정중히 거절하게 하거나("저는 챗봇이라 투표할 수 없습니다"), 애매한 질의("Freezing")를 감지해 되묻게 하는 데도 쓰인다. 에이전트에서는 다음에 어떤 도구를 쓸지 결정하는 다음 행동 예측기로, 메모리를 갖춘 모델에서는 어느 메모리 계층에서 정보를 가져올지 예측하는 라우터로 확장된다. 라우터는 GPT-2·BERT·라마 7B 같은 작은 모델이나 아예 처음부터 만든 소형 분류기로 구현하는 경우가 많다 — 라우터가 여러 번 호출돼도 지연 시간·비용이 크게 늘지 않아야 하기 때문이다. 다른 컨텍스트 한계를 가진 모델로 라우팅할 때는 그 모델의 한계에 맞게 컨텍스트를 자르거나, 더 큰 컨텍스트 한계를 가진 모델로 보내야 할 수도 있다. 순서는 유연하지만 대개 라우팅 → 검색 → 생성 → 스코어링(평가) 흐름이 가장 흔하다.
게이트웨이는 조직이 다양한 모델과 통합되고 안전하게 상호작용하게 해주는 중간 계층이다 — 자체 호스팅 모델과 여러 상용 API 뒤의 모델에 통합 인터페이스를 제공해, 모델 API가 바뀌어도 그 API에 의존하는 모든 애플리케이션이 아니라 게이트웨이만 고치면 되게 해준다. 게이트웨이는 조직 토큰을 여러 사람에게 직접 나눠주는 대신 단일 접근 지점에만 접근 권한을 부여하는 방식으로 접근 제어를 구현하고, API 호출량을 모니터링·제한해 비용을 관리한다. 속도 제한이나 API 실패에 대비해 요청을 대체 모델로 돌리거나 잠시 후 재시도하는 폴백 정책을 구현하는 데도 쓰인다. 모든 요청·응답이 게이트웨이를 거치므로 로드 밸런싱·로깅·분석, 때로는 캐싱·가드레일까지 여기에 얹기 좋다. 포트키의 AI 게이트웨이, MLflow AI 게이트웨이, 웰스심플의 LLM 게이트웨이 등 바로 쓸 수 있는 솔루션이 여럿 있다. 이 단계 이후로는 게이트웨이가 이전의 "모델 API" 상자를 대체한다.
1.4 4단계 — 캐시로 지연 시간 줄이기
캐싱은 오랫동안 소프트웨어에서 지연 시간·비용을 줄이는 핵심 기법이었고, 그 아이디어는 AI 애플리케이션에도 그대로 통한다. KV 캐싱·프롬프트 캐싱을 포함한 추론 캐싱은 이미 9장(추론 최적화) — 모델 수준 최적화에서 다뤘으므로, 여기서는 시스템 캐싱에 집중한다. 시스템 캐싱은 크게 완전 일치 캐싱과 시맨틱 캐싱 두 방식이 있다.
완전 일치 캐싱은 정확히 같은 항목이 요청될 때만 캐시를 재사용한다 — 제품 요약을 요청받으면 그 제품의 요약이 이미 캐시에 있는지 먼저 확인하고, 있으면 가져오고 없으면 새로 만들어 저장한다. 벡터 검색이 중복되지 않도록 임베딩 기반 검색 캐시에도 같은 방식이 쓰인다. 생각의 사슬처럼 여러 단계를 거치거나 검색·SQL 실행·웹 검색처럼 시간이 오래 걸리는 질의일수록 캐싱의 이득이 크다. 구현은 빠른 인메모리 저장소나, 용량 문제를 고려한 PostgreSQL·레디스 같은 계층형 저장소로 할 수 있고, 캐시 크기 관리에는 LRU(least recently used, 가장 최근에 쓰인 것부터 유지)·LFU(least frequently used, 가장 자주 쓰인 것부터 유지)·FIFO(first in, first out) 같은 제거 정책이 중요하다. 재사용 가능성이 낮은 사용자별 질의("최근 주문 상태")나 시간에 민감한 질의("오늘 날씨")는 캐시에 두지 않는 것이 좋으며, 이 판단을 위해 질의를 캐시 대상으로 분류하는 별도 모델을 두는 팀도 있다.
주의 — 캐싱을 제대로 처리하지 않으면 데이터가 유출될 수 있다. 반품 정책이 사용자 멤버십에 따라 달라지는데도 그 응답을 "일반 질의"로 캐시해 버리면, 다른 사용자가 같은 질문을 했을 때 원래 사용자의 정보가 그대로 노출될 수 있다.
시맨틱 캐싱은 질의가 완전히 같지 않아도 의미가 비슷하면 캐시된 응답을 재사용한다("베트남의 수도가 어디인가요?"와 "베트남 수도 도시는 어디인가요?"). 3장 §5 참조 데이터 유사도 측정에서 다룬 의미적 유사도 계산이 그대로 쓰인다 — 질의마다 임베딩을 만들고, 벡터 검색으로 가장 유사한 캐시된 임베딩과의 유사도 점수를 구하고, 그 점수가 임곗값을 넘으면 캐시된 결과를 반환한다. 캐시 적중률을 높여 비용을 줄일 수 있지만 모델 성능을 저하시킬 수도 있다 — 좋은 임베딩·안정적인 벡터 검색·신뢰할 수 있는 유사도 측정이 모두 필요하고, 적절한 임곗값을 찾으려면 시행착오가 많이 필요하며, 벡터 검색이 들어가는 만큼 시간·연산 비용도 늘어난다. 그래도 캐시 적중률이 높을 상황이라면 여전히 가치가 있을 수 있으니, 도입 전 효율·비용·성능 위험을 꼼꼼히 검토해야 한다.
1.5 5단계 — 에이전트 패턴 추가
지금까지의 아키텍처는 각 질의가 순차적인 흐름만 따르는 비교적 단순한 형태다. 6장 §5 에이전트에서 다룬 것처럼 애플리케이션 흐름은 루프·병렬 실행·조건부 분기를 통해 훨씬 복잡해질 수 있다. 예를 들어 시스템이 출력을 만든 뒤 작업이 아직 끝나지 않았다고 판단하면 추가 검색을 수행하고, 원래 응답과 새로 검색한 컨텍스트를 합쳐 같은 모델이나 다른 모델에 다시 넣는 루프가 만들어진다.
모델의 출력은 이메일 작성·주문·은행 이체 시작 같은 쓰기 작업을 호출하는 데도 쓰일 수 있다. 쓰기 작업은 시스템이 환경을 직접 바꿀 수 있게 해 능력을 크게 넓히지만, 그만큼 더 큰 위험에 노출시킨다 — 모델에 쓰기 작업 권한을 줄 때는 최대한 신중해야 한다. 이 모든 단계를 따라오면 아키텍처는 꽤 복잡해져 있을 것이다 — 복잡한 시스템은 더 많은 일을 처리하지만 실패 유형과 지점도 그만큼 다양해져 디버깅이 어려워진다. 이를 관리하는 방법이 다음 절의 주제다.
1.6 모니터링과 관찰 가능성
관찰 가능성을 별도 절로 다루지만, 사실 이는 나중에 덧붙이는 것이 아니라 제품을 설계할 때부터 핵심에 둬야 한다 — 제품이 복잡해질수록 그 중요성도 커진다. 데브옵스 커뮤니티의 세 지표가 관찰 가능성 수준을 가늠하는 데 도움이 된다 — 평균 탐지 시간(MTTD)(문제 발생 후 감지까지), 평균 응답 시간(MTTR)(감지 후 해결까지), 변경 실패율(CFR)(수정·롤백이 필요한 배포의 비율). CFR이 높다고 모니터링이 나쁜 것은 아니지만, 잘못된 변경이 배포 전에 걸리도록 평가 파이프라인을 다시 점검할 신호는 된다 — 평가 지표는 모니터링 지표로 자연스럽게 이어져야 하고, 모니터링에서 발견한 문제는 다시 평가 파이프라인에 반영돼야 한다.
모니터링 대 관찰 가능성 — 모니터링은 시스템의 외부 출력을 지속적으로 관찰해 문제 발생 시점을 알아내지만, 그 출력만으로 원인까지 알 수 있다는 보장은 없다. 관찰 가능성은 더 강한 가정을 한다 — 외부 출력에 대한 지식으로 내부 상태까지 추론할 수 있다는 것이다. 관찰 가능한 시스템은 새 코드를 배포하지 않고도 로그·지표만 보고 원인을 알아낼 수 있어야 한다.
지표의 목적은 그 자체가 아니라 무언가 잘못됐을 때 알려주고 개선 기회를 찾는 것이다. 그래서 어떤 지표를 볼지보다 먼저 어떤 실패 유형을 잡고 싶은지 정하는 것이 중요하다 — 환각을 막으려면 출력이 컨텍스트에서 추론 가능한지를, 비용을 관리하려면 입출력 토큰 수·캐시 적중률을 본다. 이 책에서 다룬 여러 품질 지표(3~6장)를 다시 정리하면, 형식 실패는 눈에 띄고 검증하기 쉬워 가장 추적하기 쉽고, 개방형 생성은 사실 일관성·간결성·창의성 같은 지표를 AI 평가자로 잴 수 있고, 안전 문제는 유해성 지표와 개인정보 탐지로, 사용자 행동은 조기 종료 빈도·대화당 턴 수·입출력 토큰 수·토큰 분포 변화로, 지연 시간은 TTFT·TPOT·총 지연 시간(9장에서 다룬 지표)으로, 구성 요소별로는 RAG의 컨텍스트 관련성·정확도나 벡터 데이터베이스의 저장 공간·질의 시간으로 잰다. 여러 지표를 함께 쓰게 되므로 DAU·세션 지속 시간·구독 수 같은 핵심 비즈니스 지표와의 상관관계를 보는 것도 유용하다. 지표는 표본 검사(빠르게 문제를 찾음)와 전수 검사(포괄적이지만 비용이 큼)를 조합해 계산할 수 있고, 사용자·릴리즈 버전·프롬프트/체인 버전과 타입·시간 등으로 세분화할 수 있어야 성능 변화의 원인을 짚기 쉽다.
로그와 트레이스는 지표가 답하지 못하는 질문에 답한다. 지표가 "5분 전에 문제가 생겼다"고 알려줘도 정확히 무슨 일이 일어났는지는 로그를 봐야 안다. 로깅의 일반 원칙은 "모든 것을 로깅"하는 것이다 — 모델 API 엔드포인트·모델 이름·샘플링 설정·프롬프트 템플릿 같은 설정, 사용자 질의·최종 프롬프트·중간 출력·최종 출력, 도구 호출 여부와 그 출력, 구성 요소의 시작·종료·충돌 시점까지 남기고, 어디서 온 로그인지 알 수 있도록 태그·ID를 붙인다. 로그가 개별 이벤트를 따로 남긴다면, 트레이스는 관련된 이벤트를 연결해 하나의 요청이 처음부터 끝까지 어떤 구성 요소·서비스를 거쳤는지 보여준다 — 검색된 문서, 모델에 보낸 최종 프롬프트, 각 단계의 소요 시간·비용까지 포함해, 실패가 검색 단계였는지 생성 단계였는지 정확히 짚어낼 수 있게 해준다.
드리프트 감지도 필요하다 — 구성 요소가 많을수록 예고 없이 바뀔 수 있는 것도 많아진다. 시스템 프롬프트는 템플릿 업데이트나 동료의 오타 수정으로 바뀔 수 있고(간단한 로직으로 변경을 감지할 수 있다), 사용자는 시간이 지나며 더 나은 결과를 얻는 법을 익혀 행동을 바꾸며(응답이 점점 간결해지는 식), 기반 모델은 API 자체는 그대로인데 제공업체가 공개하지 않은 채 업데이트될 수 있다 — 첸 등(2023)의 연구는 GPT-4·GPT-3.5의 3월판과 6월판 사이에 벤치마크 점수 차이가 눈에 띄었다고 보고했고, 보이스플로는 GPT-3.5-turbo를 구버전에서 신버전으로 바꿨을 때 성능이 10% 떨어졌다고 밝혔다.
1.7 AI 파이프라인 오케스트레이션
AI 애플리케이션은 여러 모델·데이터베이스·도구를 함께 쓰며 복잡해진다. 오케스트레이터는 이 복잡함을 풀기 위해 구성 요소들의 상호작용 방식을 정의해 엔드투엔드 파이프라인을 만들고, 데이터가 구성 요소 사이를 매끄럽게 흐르도록 보장한다. 오케스트레이터는 크게 구성 요소 정의(어떤 모델·검색 소스·도구를 쓸지 알려주기)와 체이닝(질의를 받아 작업을 완료할 때까지의 단계들을 정의)이라는 두 단계로 작동한다. 체이닝의 전형적인 단계는 ① 원본 질의 처리 → ② 관련 데이터 검색 → ③ 질의와 검색 결과를 결합해 프롬프트 구성 → ④ 모델 응답 생성 → ⑤ 응답 평가 → ⑥ 통과하면 반환, 아니면 상담원에게 전달이다. 오케스트레이터는 한 단계의 출력이 다음 단계가 기대하는 형식인지 확인해 주고, 데이터 흐름이 끊어지면 사용자에게 알려야 한다. 지연 시간이 엄격하다면 라우팅과 개인정보 제거처럼 서로 독립적인 작업은 병렬로 처리한다.
주의 — AI 파이프라인 오케스트레이터는 에어플로·메타플로 같은 일반 워크플로 오케스트레이터와는 다른 도구다.
랭체인·LlamaIndex·Flowise·Langflow·Haystack 등이 대표적인 오케스트레이션 도구이며, 검색·도구 사용이 흔한 패턴이라 많은 RAG·에이전트 프레임워크도 오케스트레이션 역할을 겸한다. 다만 프로젝트 초기부터 오케스트레이터로 바로 넘어가기보다 도구 없이 먼저 만들어 보는 편이 나을 수 있다 — 외부 도구는 그 자체로 복잡성을 더하고, 너무 일찍 도입하면 시스템이 실제로 어떻게 동작하는지가 추상화 뒤에 가려져 이해·디버깅이 어려워진다. 개발 후반에 도입을 검토하게 될 때는 ① 지금 쓰거나 앞으로 쓸 구성 요소를 지원하는지(통합·확장성) ② 분기·병렬 처리·오류 처리 같은 고급 기능으로 복잡한 파이프라인을 지원하는지 ③ 직관적인 API·문서·커뮤니티 지원과 트래픽 증가에 따른 확장성이 있는지, 이 세 축으로 평가한다.
2. 사용자 피드백
사용자 피드백은 소프트웨어에서 늘 두 가지 역할을 해왔다 — 성능 평가와 개발 방향 안내다. AI 애플리케이션에서는 여기에 더해, 피드백 자체가 독점 데이터이자 경쟁 우위의 원천이 된다는 점이 훨씬 중요해진다. 8장 §5 데이터 수집과 주석에서 다룬 데이터 플라이휠을 만들려면 잘 설계된 사용자 피드백 시스템이 꼭 필요하다. 피드백은 모델 개인화와 향후 모델 학습에도 쓰일 수 있으며, 데이터가 점점 부족해지는 지금 독점 데이터의 가치는 그 어느 때보다 크다 — 먼저 출시해 사용자를 확보한 제품은 피드백이라는 독점 데이터를 계속 쌓으며 경쟁자가 따라잡기 어려운 격차를 만든다. 다만 사용자 피드백은 곧 사용자 데이터이므로, 다른 민감 데이터와 똑같이 프라이버시를 지키고 사용자에게 사용 방식을 알려야 한다.
2.1 대화형 피드백 추출
피드백은 전통적으로 명시적 피드백(좋아요/싫어요·추천/비추천·별점·"문제가 해결됐나요?" 같은 질문에 대한 응답)과 암시적 피드백(응답이 아닌 행동에서 추론하는 정보)으로 나뉜다. 명시적 피드백은 애플리케이션마다 형태가 비슷해 이해하기 쉬운 대신, 사용자에게 추가 행동을 요구한다. 암시적 피드백은 애플리케이션의 성격에 따라 형태가 무궁무진해 훨씬 풍부하지만 그만큼 노이즈도 많다. 대화형 인터페이스는 사용자가 일상 대화처럼 좋은 응답은 격려하고 오류는 바로잡아 줄 수 있게 해, 암시적 피드백을 특히 다양하게 만든다.
암시적 대화형 피드백은 사용자 메시지의 내용과 의사소통 패턴 둘 다에서 추론할 수 있다. 대표적인 신호는 다음과 같다.
- 조기 종료 — 생성 중단, 앱 종료, "그만" 지시, 방치 등은 대화가 잘 풀리지 않고 있다는 신호다.
- 오류 교정 — "아니요, ...", "내 말은..."으로 시작하는 후속 질의는 모델의 응답이 빗나갔다는 신호다. "빌은 용의자예요, 피해자가 아니에요" 같은 구체적 교정 피드백은 모델이 다음 응답에 곧바로 반영할 수 있어야 한다. 에이전트 활용 사례에서는 "XYZ의 깃허브 페이지도 확인해 보세요" 같은 행동 교정 피드백으로도 나타난다. 사용자가 응답을 직접 편집하는 경우(생성된 코드를 사용자가 고치는 등)는 원래 응답이 완전히 옳지 않았다는 매우 강한 신호이며, 편집 전/후 응답은 그대로 선호도 데이터(비선호 응답, 선호 응답)가 된다.
- 불평 — 교정하지 않고 그냥 "틀렸다·관련 없다·너무 길다"고 불평하는 경우다. 쉬 등(2022)의 FITS 데이터셋 자동 클러스터링은 대화형 검색 피드백을 8개 그룹으로 나눴는데, "요구사항을 다시 명확히 설명함"이 26.5%로 가장 많았고, 그다음이 "봇이 답하지 않거나 관련 없는 정보를 주거나 사용자가 직접 찾으라고 함"(16.2%), "특정 검색 결과를 직접 제시함"(16.2%), "검색 결과를 쓰라고 제안함"(15.3%), "사실과 다르거나 검색 결과에 근거하지 않았다고 지적함"(11.3%), "구체적이지 않거나 상세하지 않다고 지적함"(9.4%), "확신 없음('잘 모르겠지만')을 지적함"(4.2%), "반복이나 무례함을 지적함"(1.0%) 순이었다.
- 감정 — 이유 없는 부정적 감정 표현("으...")도 대화 전반의 감정 흐름을 분석하면 봇의 성능을 가늠하는 신호가 된다. 모델의 응답 거부("죄송합니다, 그건 모르겠어요")가 잦은 것도 자연어 피드백의 일종이다.
- 기타 행동 신호 — 재생성(다른 응답을 다시 만들어 봄 — 사용량 기반 과금 앱일수록 더 강한 불만족 신호일 수 있다), 재생성 후 새 응답과 이전 응답의 우열을 직접 묻는 비교 피드백, 대화 관리(삭제·이름 변경·공유·북마크), 대화 길이(애플리케이션 성격에 따라 좋은 신호일 수도 나쁜 신호일 수도 있다), 대화 다양성(길지만 같은 말만 반복하면 루프에 갇힌 신호).
명시적 피드백은 해석은 쉽지만 응답 편향이 있다 — 불만족한 사용자가 더 자주 불평해 실제보다 부정적으로 보일 수 있다. 암시적 피드백은 풍부하지만 해석이 어렵다 — 대화 공유는 실수를 지적하려는 것일 수도, 유용해서 퍼뜨리려는 것일 수도 있어 사용자 자체를 연구해야 이유를 알 수 있다.
2.2 피드백 설계
피드백을 수집하는 시점. 피드백은 사용자 여정 전반, 특히 다음 상황에서 유용하다.
- 처음 시작할 때 — 초기 피드백은 애플리케이션의 초기 동작을 사용자에 맞게 보정하는 데 쓰인다(언어 학습 앱의 실력 측정 질문 등). 다만 마찰을 일으키므로 대개 선택 사항으로 두고, 응답이 없으면 중립값에서 시작해 점차 보정한다.
- 문제가 생겼을 때 — 환각·부당한 거부·응답 지연 등에 언제든 피드백을 남기게 하고, 가능하면 사람과 협력해 작업을 완수하게 한다(모델이 제품을 잘못 분류하면 사용자가 직접 범주를 고치는 식). 이미지 생성의 인페인팅(원하는 부분만 다시 그리기)이 좋은 예다 — 사용자는 더 나은 결과를 얻고, 개발자는 고품질 피드백을 얻는다.
- 모델의 확신이 낮을 때 — 짧은 요약과 상세 요약 중 어느 쪽을 원하는지 확신이 없다면 둘 다 보여주고 선택하게 하는 식으로, 이 비교 신호는 선호도 파인튜닝에 쓸 수 있다. 다만 전체 응답을 나란히 보여주면 다 읽기 귀찮아 노이즈 섞인 선택이 나올 수 있어, 일부는 응답의 앞부분만 보여주고 클릭해서 펼치게 한다.
긍정적 피드백을 요청할지도 고민거리다. 애플의 인터페이스 가이드라인은 "좋은 결과는 기본"이라는 관점에서 긍정·부정 피드백을 모두 요청하는 것을 권장하지 않지만(요청 자체가 좋은 결과를 예외처럼 느끼게 한다), 사용자가 놀랍도록 좋았던 순간을 알려줄 통로가 있어야 한다는 반론도 있다 — 어느 프로덕트 매니저는 이를 통해 부가가치가 낮은 여러 기능 대신 영향력 큰 소수 기능에 자원을 집중할 수 있다고 말했다. 인터페이스가 복잡해지는 부담은 요청 빈도를 낮춰(예: 1%에게만 노출) 관리할 수 있지만, 노출 비율이 낮을수록 표본 편향 위험은 커진다.
피드백 수집 방법. 피드백은 사용자의 워크플로에 자연스럽게 녹아야 하고, 방해가 되지 않아야 하며, 쉽게 무시할 수도 있어야 한다.
- 미드저니는 프롬프트마다 이미지 4장을 만들고 확대·변형·재생성 세 선택지를 준다 — 확대는 가장 강한 긍정, 변형은 더 약한 긍정, 재생성은 불만족 신호이지만 단순 호기심으로 다른 안을 보려는 경우도 있다.
- 깃허브 코파일럿은 제안을 연한 색으로 보여줘, 탭으로 수락하거나 계속 타이핑해 무시하는 두 행동 모두가 피드백이 되게 한다.
- 챗GPT·클로드 같은 독립형 앱은 일상 워크플로에 통합돼 있지 않아, 지메일이 자체 이메일 초안의 실제 사용 여부를 추적할 수 있는 것과 달리 제안한 이메일이 실제로 전송됐는지조차 알기 어렵다.
좋아요/싫어요 비율만으로도 만족도 분석은 가능하지만, 더 깊은 분석에는 최근 5~10턴 같은 주변 컨텍스트가 필요하다 — 다만 여기에 개인 식별 정보가 있으면 사용자 동의 없이는 확보할 수 없으므로, 서비스 약관에 분석·개선 목적의 데이터 접근 조항을 넣거나, 피드백 제출 시 최근 상호작용을 함께 공유할지 체크박스로 물어야 한다. 사용자에게 피드백 사용처(개인화·통계·모델 학습 중 무엇인지)를 알리면 더 많고 좋은 피드백을 얻는 동기가 되고, 프라이버시가 우려된다면 실제로 그런 경우에 한해 기기 밖으로 나가지 않는다고 안심시켜야 한다.
잘못된 예 / 올바른 예 — 선택지 설계. 챗GPT가 통계 질의에 대한 두 응답 중 "더 나은 쪽"을 고르라고 요청했을 때, 사용자가 정답을 판단할 수 없어("모르겠다" 선택지가 없어) 당황한 사례가 있다 — 이해할 수도 없는 선택을 강요하는 것은 잘못된 예다. 반대로 루마의 워크숍 피드백 폼은 1점짜리 화난 이모지를 5점 자리에 배치해, 응답 내용은 긍정적인데도 사용자가 실수로 최악의 별점을 남기게 만든 사례가 있다 — 아이콘·툴팁으로 선택지를 명확히 하는 것이 올바른 예다.
공개·비공개 여부도 신중히 정해야 한다. 초기 미드저니는 확대·변형·재생성 행위를 모두 공개했지만(현재는 유료 플랜에서 비공개 가능), 사용자는 비공개 환경에서 더 솔직해지는 경향이 있어 공개 범위가 피드백 품질에 영향을 준다 — 2024년 X(구 트위터)가 '좋아요'를 비공개로 전환한 뒤 좋아요 수가 늘었다는 사례가 그렇다. 다만 비공개는 발견 가능성·설명 가능성을 낮출 수 있다 — 팔로우하는 사람의 좋아요로 추천하는 서비스라면, 좋아요를 숨기는 순간 사용자는 왜 그 콘텐츠가 피드에 떴는지 이해하기 어려워진다.
2.3 피드백의 한계
사용자 피드백은 가치 있지만 공짜도 만병통치약도 아니다.
편향. 사람들이 실제보다 후하게 평가하는 관대함 편향이 대표적이다 — 갈등을 피하고 싶거나, 부정 평가에는 이유를 적어야 한다는 부담 때문에 빨리 끝내려 긍정을 선택하는 식이다. 우버는 2015년 기사 평균 평점이 4.8점이었고 4.6점 미만이면 퇴출 위험에 처했다 — 좋은/나쁜 기사를 가르는 목적에는 이 편향이 있어도 어느 정도 통했지만, 더 세밀한 피드백을 원한다면 숫자 별점 대신 "훌륭한 여정, 훌륭한 기사입니다"부터 "이 기사와 다시는 매칭하지 말아 주세요"까지 서술형 선택지로 부담을 낮추는 편이 낫다. 무작위성(둘 다 읽기 귀찮아 아무거나 클릭), 위치 편향(앞선 제안을 실제 품질과 무관하게 더 선호), 선호도 편향(부정확해도 긴 응답을 선호하는 길이 편향, 마지막에 본 응답을 선호하는 최근성 편향)도 흔한 편향이다 — 위치를 무작위로 바꾸거나 위치별 실제 성공률을 따로 계산해 줄일 수 있다.
퇴화 피드백 루프. 사용자 피드백은 기본적으로 불완전하다 — 보여준 것에 대한 피드백만 얻을 수 있기 때문이다. 예측이 피드백에 영향을 주고 그 피드백이 다시 다음 모델에 영향을 주며 초기 편향이 점점 심해지는 것을 퇴화 피드백 루프라 한다 — 순위가 조금 더 높았던 동영상 A가 더 많은 클릭을 얻어 시스템이 A를 계속 밀어주고, B는 기회조차 얻지 못한 채 뒤처지는 식이다(노출 편향·인기 편향·필터 버블로도 불리는 현상). 소수 초기 사용자가 고양이 사진을 좋아한다는 피드백만으로 시스템이 고양이 사진을 더 많이 생성하다 결국 애플리케이션 전체가 그 취향으로 쏠려버리는 것도 같은 원리이며, 인종·성별 편향이나 선정적 콘텐츠 선호도 같은 방식으로 증폭될 수 있다. 사용자 피드백으로 모델을 학습시키면 가장 정확한 응답보다 사용자가 듣고 싶어 하는 응답을 하도록 학습될 위험도 있다 — 샤르마 등(2023)은 사람 피드백으로 학습된 모델이 사용자 견해에 동조하는 아첨 경향을 보인다고 밝혔다. 그래서 피드백을 제품에 반영하기 전에 그 한계와 잠재적 영향을 먼저 이해해야 한다.
핵심 개념 정리
| 개념 | 한 줄 설명 |
|---|---|
| 5단계 아키텍처 확장 | 단순 질의-응답 → 컨텍스트 보강 → 가드레일 → 라우터/게이트웨이 → 캐시 → 에이전트 패턴 순으로 필요에 따라 추가 |
| 입력 vs 출력 가드레일 | 입력은 유출·악성 프롬프트를 막고, 출력은 품질·보안 실패를 탐지해 재시도·이관으로 대응 |
| 위반율 vs 오거부율 | 방어를 강하게 하면 위반율은 낮아지지만 오거부율이 올라 사용성이 떨어지는 트레이드오프 |
| 라우터 vs 게이트웨이 | 라우터는 질의를 알맞은 모델·행동으로 분기시키고, 게이트웨이는 여러 모델에 통합 인터페이스·접근 제어·폴백을 제공 |
| 완전 일치 vs 시맨틱 캐싱 | 전자는 동일 질의만, 후자는 의미가 비슷한 질의까지 재사용 — 후자는 적중률은 높지만 벡터 검색 비용·오탐 위험이 따름 |
| 모니터링 vs 관찰 가능성 | 모니터링은 문제 발생을 감지만 하고, 관찰 가능성은 외부 출력만으로 내부 원인까지 추론할 수 있게 계측 |
| MTTD·MTTR·CFR | 각각 감지 속도·복구 속도·배포 실패율을 재는 관찰 가능성 성숙도 지표 |
| 로그 vs 트레이스 | 로그는 개별 이벤트 기록, 트레이스는 한 요청이 거친 전체 경로를 연결한 타임라인 |
| 오케스트레이션 2단계 | 구성 요소 정의(무엇을 쓸지 선언) + 체이닝(단계를 어떻게 연결할지 정의) |
| 명시적 vs 암시적 피드백 | 전자는 사용자가 의식적으로 남기고, 후자는 재생성·편집·이탈 같은 행동에서 추론 |
| 피드백 편향 4종 | 관대함 편향(후하게 평가) · 무작위성 · 위치 편향 · 선호도 편향(길이·최근성) |
| 퇴화 피드백 루프 | 초기의 작은 순위 차이가 피드백을 통해 점점 증폭돼 편향이 굳어지는 현상 |
실무 체크리스트
- [ ] 지금 아키텍처에 컨텍스트 보강·가드레일·라우터/게이트웨이·캐시·에이전트 패턴 중 어디까지 있고, 다음에 추가할 구성 요소가 왜 필요한지 설명할 수 있는가?
- [ ] 입력 가드레일이 개인정보 유출과 악성 프롬프트를 모두 다루는가, 출력 가드레일이 품질 실패와 보안 실패를 구분해 각각 정책을 두었는가?
- [ ] 가드레일의 위반율뿐 아니라 오거부율도 함께 추적해, 보안과 사용성의 균형을 확인하고 있는가?
- [ ] 스트림 완성 모드를 쓴다면 출력 가드레일이 부분 응답에서도 안전하지 않은 출력을 걸러낼 수 있는지 확인했는가?
- [ ] 캐싱 대상을 고를 때 재사용 가능성이 낮은 사용자별·시간 민감 질의를 캐시에서 제외했는가, 시맨틱 캐싱의 유사도 임곗값을 시행착오로 검증했는가?
- [ ] 어떤 실패 유형을 잡고 싶은지 먼저 정하고 그에 맞춰 지표를 설계했는가 — 지표만 보고 로그·트레이스 없이 원인을 추정하고 있지는 않은가?
- [ ] 시스템 프롬프트 변경·사용자 행동 변화·기반 모델 업데이트 세 가지 드리프트 유형을 각각 감지할 방법이 있는가?
- [ ] 피드백 수집이 사용자 워크플로를 방해하지 않으면서, 무시하기도 쉬운 형태로 설계됐는가?
- [ ] 별점·비교 같은 명시적 피드백에 관대함 편향·위치 편향·최근성 편향이 섞이지 않도록 선택지 문구나 노출 순서를 조정했는가?
- [ ] 사용자 피드백으로 모델을 다시 학습시킬 때, 정확성보다 사용자가 듣고 싶어 하는 응답 쪽으로 쏠리는 퇴화 피드백 루프·아첨 경향을 점검할 계획이 있는가?
연습문제
- 설계. 사내 문서 검색 챗봇에 1단계(컨텍스트 보강)부터 5단계(에이전트 패턴)까지 순서대로 구성 요소를 추가한다고 할 때, 각 단계에서 새로 생기는 위험을 하나씩 들고 그 위험을 줄일 방법을 제시하라.
- 판단. 의료 상담 챗봇과 사내 잡담용 챗봇 각각에 대해 입력·출력 가드레일을 얼마나 엄격하게 설계할지 정하고, 그 결정이 위반율·오거부율에 어떤 영향을 주는지 근거를 들어 설명하라.
- 비교. "최근 3일간 내 주문이 어떻게 됐나요?"와 "환불 정책이 어떻게 되나요?" 두 질의 중 어느 쪽을 캐시 대상으로 삼을지 판단하고, 완전 일치 캐싱과 시맨틱 캐싱 중 어느 것이 더 적합한지 근거와 함께 설명하라.
- 적용. 새로 만든 AI 기능이 배포 후 3주 만에 사용자 불만이 늘었다. 이 문제의 원인을 찾기 위해 지표·로그·트레이스·드리프트 감지를 어떤 순서로, 각각 무엇을 확인하며 조사할지 설계하라.
- 비판. 별점 5점 만점 피드백을 서술형 선택지로 바꾸자는 제안에 대해, 이 변경이 줄이는 편향과 새로 만들 수 있는 문제를 각각 하나씩 들어 이 제안을 평가하라.
최신 동향 (2026-09 기준)
최신 동향 (검증 2026-09-12) — 이 장이 다룬 아키텍처 확장의 5단계, 가드레일·라우터·게이트웨이·캐싱의 원리, 모니터링·관찰 가능성의 구분, 사용자 피드백의 설계 원칙과 편향은 그대로 유효하다. 다만 이 장이 예로 든 구체적 도구 몇 가지의 소속·상태는 책 집필 이후 바뀌었다.
- §1.6이 다룬 관찰 가능성 도구 생태계가 재편됐다. 이 장은 관찰 가능성을 독립적인 실무 영역으로 소개했는데, 그 영역의 대표 오픈소스 도구 두 곳이 모두 다른 회사에 인수됐다 — LLM 트레이싱·평가·프롬프트 관리 플랫폼 Langfuse는 2026년 1월 ClickHouse에 인수됐고(오픈소스·셀프호스팅은 그대로 유지), LLM 관찰 가능성과 AI 게이트웨이를 함께 제공하던 Helicone은 2026년 3월 Mintlify에 인수돼 유지보수 모드(보안 패치·버그 수정 중심)로 전환됐다. §1.3이 소개한 "모델 게이트웨이"와 §1.6의 "관찰 가능성"이 실제로는 하나의 제품으로 합쳐지는 방향으로 시장이 움직이고 있다는 신호로 읽을 수 있다.
- §1.2가 예로 든 가드레일 솔루션은 지금도 활발히 유지되고 있다. 엔비디아의 NeMo Guardrails와 §1.3이 예로 든 Portkey AI 게이트웨이는 이 책이 출간된 뒤에도 계속 개발되고 있다 — 다만 도구 이름을 코드에 그대로 옮기지 말고, 실제로 채택하기 전에는 공식 저장소에서 최신 활성 여부를 직접 확인해야 한다.
부록 A. 핵심 비교표
완전 일치 캐싱 vs 시맨틱 캐싱
| 구분 | 완전 일치 캐싱 | 시맨틱 캐싱 |
|---|---|---|
| 재사용 조건 | 질의가 문자 그대로 동일 | 질의의 의미가 임곗값 이상 유사 |
| 필요한 것 | 키-값 저장소(인메모리·PostgreSQL·레디스 등) | 임베딩 모델 + 벡터 데이터베이스 + 유사도 임곗값 |
| 강점 | 구현이 단순하고 결과가 결정적 | 표현이 달라도 같은 의미면 적중 — 적중률이 더 높음 |
| 위험 | 표현이 조금만 달라도 적중 실패 | 오탐 시 부정확한 응답 반환, 연산 비용 증가 |
모니터링 vs 관찰 가능성
| 구분 | 모니터링 | 관찰 가능성 |
|---|---|---|
| 가정 | 외부 출력과 내부 상태의 연관성을 가정하지 않음 | 외부 출력으로 내부 상태를 추론할 수 있다고 가정 |
| 할 수 있는 것 | 문제 발생 시점을 알아냄 | 새 코드 배포 없이 로그·지표만으로 원인까지 규명 |
| 대표 산출물 | 지표(문제가 있다는 신호) | 로그·트레이스(왜 문제가 생겼는지의 근거) |
라우터 vs 게이트웨이
| 구분 | 라우터 | 게이트웨이 |
|---|---|---|
| 역할 | 질의의 의도를 예측해 알맞은 모델·행동으로 분기 | 여러 모델에 통합 인터페이스·접근 제어·비용 관리·폴백 제공 |
| 위치 | 보통 모델 API 앞단, 검색보다 먼저 오는 경우가 많음 | 모델 API 상자 자체를 대체 |
| 실패 시 결과 | 잘못된 모델·도구로 질의가 흘러감 | 접근 제어·비용 관리·장애 대응 기능 전체가 약해짐 |
명시적 피드백 vs 암시적 피드백
| 구분 | 명시적 피드백 | 암시적 피드백 |
|---|---|---|
| 얻는 방법 | 좋아요·별점·설문 등 사용자의 의식적 응답 | 재생성·편집·이탈 등 사용자 행동에서 추론 |
| 해석 난이도 | 비교적 쉬움 | 어려움(노이즈가 많고 의미가 다의적) |
| 대표 한계 | 응답 편향(불만족한 사용자가 더 자주 응답) | 해석 오류(공유가 긍정 신호인지 부정 신호인지 불분명) |
부록 B. 추천 참고 자료
외부 자료 (Tier 1 공식, 생존·기능 확인 2026-09-12)
- NeMo Guardrails 공식 저장소 — §1.2가 예로 든 오픈소스 가드레일 툴킷. github.com/NVIDIA/NeMo-Guardrails
- Portkey AI 게이트웨이 공식 저장소 — §1.3이 예로 든 모델 게이트웨이 구현체(1,600개 이상 모델로 라우팅 + 가드레일 통합). github.com/Portkey-AI/gateway
- Langfuse — ClickHouse 인수 공식 발표 — 최신 동향에서 다룬 관찰 가능성 도구 인수의 1차 출처. langfuse.com/blog/joining-clickhouse
- Helicone — Mintlify 인수 공식 발표 — 위와 같은 맥락의 또 다른 1차 출처. helicone.ai/blog/joining-mintlify
- 샨카르 등(2024) 논문 — §1.6이 로그를 수동으로 살펴보는 습관의 근거로 인용한 원문. Who Validates the Validators? Aligning LLM-Assisted Evaluation of LLM Outputs with Human Preferences
더 해보기 — 읽고 끝내지 않으려면
- 자신이 쓰는 챗봇·코딩 도우미(챗GPT·클로드·깃허브 코파일럿 등)에서 재생성·수락/거절·편집 같은 행동을 한 번씩 해 보고, §2.1이 설명한 "이 행동이 개발자에게 어떤 신호로 읽힐지"를 직접 추측해 본다.
- §1.2의 PII 마스킹 아이디어를 본떠, 자신이 자주 쓰는 프롬프트에서 개인정보에 해당하는 부분을
[전화번호]처럼 플레이스홀더로 바꿔 보고 그래도 같은 결과를 얻을 수 있는지 확인한다. - §2.3의 네 가지 편향(관대함·무작위성·위치·선호도) 중 하나를 골라, 최근에 남긴 별점·리뷰 하나가 그 편향의 영향을 받지 않았는지 스스로 점검해 본다.
본 책 연계 챕터
| 챕터 | 이 장이 다루지 않은 것 |
|---|---|
| 3장 §5 참조 데이터 유사도 측정 | 시맨틱 캐싱이 그대로 가져다 쓰는 의미적 유사도 계산의 구체적 원리(임베딩·코사인 유사도) |
| 4장 §3 생성 능력 — 사실 일관성 · 4장 §4 생성 능력 — 안전성 | 출력 가드레일이 잡아야 할 품질 실패·보안 실패 유형의 구체적 정의와 측정 방법 |
| 5장 §7 프롬프트 공격의 세 가지 유형 · 5장 §8 프롬프트 공격에 대한 방어 | 입력 가드레일이 막아야 할 프롬프트 추출·탈옥·정보 추출 공격의 구체적 분류와 방어 기법 |
| 6장 §2 검색 알고리즘 · 6장 §4 텍스트를 넘어선 RAG | 컨텍스트 보강이 기대는 텍스트·이미지·표 검색의 구체적 알고리즘 |
| 6장 §5 에이전트 | 5단계에서 추가한 에이전트 패턴의 정의·도구·환경·위험의 구체적 내용 |
| 8장 §5 데이터 수집과 주석 | 사용자 피드백이 만드는 데이터 플라이휠의 반대편 — 그렇게 모인 데이터를 큐레이션·주석하는 방법 |
| 9장 §4·§5 | 캐시·게이트웨이가 전제하는 KV 캐싱·프롬프트 캐싱·추론 서버 구축의 구체적 구현 |
부록 C. 연습문제 풀이
-
(단계별 위험과 대응) 1단계(컨텍스트 보강)는 검색·도구가 부정확하거나 오래된 정보를 끌어와 환각을 오히려 키울 위험이 있다 — 검색 결과의 관련성·최신성을 별도로 검증하는 절차로 줄인다. 2단계(가드레일)는 지나치게 엄격하면 오거부율이 올라 정상 요청까지 막는 위험이 있다 — 위반율과 오거부율을 함께 추적하며 균형을 맞춘다. 3단계(라우터·게이트웨이)는 의도 분류가 틀리면 엉뚱한 모델로 질의가 흘러가는 위험이 있다 — 의도 분류기의 정확도를 별도로 평가하고 애매한 질의는 되묻게 한다. 4단계(캐시)는 사용자별로 달라야 할 응답을 일반 질의로 캐시해 다른 사용자에게 정보를 노출시킬 위험이 있다 — 캐시 대상에서 개인화된 질의를 제외한다. 5단계(에이전트 패턴)는 쓰기 작업 권한을 잘못 준 모델이 데이터를 삭제·변경하는 위험이 있다 — 영향력이 큰 명령은 사용자 승인을 거치게 한다.
-
(의료 상담 vs 사내 잡담 챗봇의 가드레일) 의료 상담 챗봇은 잘못된 정보가 신체적 위해로 이어질 수 있으므로 출력 가드레일을 엄격히 설계해 사실 불일치·불확실한 응답을 적극적으로 걸러야 한다 — 그 결과 오거부율이 다소 올라가더라도(애매한 질문은 "의료진과 상담하라"로 안전하게 대체) 위반율을 최소화하는 쪽에 무게를 둔다. 반대로 사내 잡담용 챗봇은 실패의 대가가 작으므로 가드레일을 상대적으로 느슨하게 두어 오거부율을 낮추고 사용성을 높이는 쪽이 합리적이다 — 다만 개인정보 유출·유해 발언 같은 최소한의 안전장치는 두 경우 모두에 필요하다.
-
(캐시 대상 판단) "최근 3일간 내 주문이 어떻게 됐나요?"는 사용자마다 답이 다르고 시간이 지나면 값도 바뀌는 사용자별·시간 민감 질의라 캐시 대상으로 부적합하다. "환불 정책이 어떻게 되나요?"는 모든 사용자에게 같은 답이 나오고 자주 바뀌지 않으므로 캐시 대상으로 적합하다. 다만 "환불 정책 알려줘"·"환불은 어떻게 하나요?"처럼 표현이 다양할 수 있으므로, 완전 일치 캐싱보다 시맨틱 캐싱을 쓰면 표현이 달라도 같은 캐시된 답을 재사용해 적중률을 높일 수 있다.
-
(불만 증가 원인 조사 순서) 먼저 지표를 확인해 문제가 시작된 시점과 어떤 지표(품질·지연·비용 중 무엇)가 이상 신호를 보이는지 좁힌다. 그다음 그 시점 전후의 로그를 살펴 실제로 어떤 요청·응답·도구 호출이 있었는지 확인하고, 트레이스로 문제가 발생한 요청 하나를 처음부터 끝까지 따라가며 검색·생성·평가 중 어느 단계에서 어긋났는지 짚는다. 마지막으로 드리프트 감지를 적용해 그 시점에 시스템 프롬프트 변경·사용자 행동 변화·기반 모델 업데이트 중 무언가가 있었는지 대조한다 — 배포 이력과 겹치면 변경 실패율(CFR) 관점에서, 겹치지 않으면 모델 제공업체의 조용한 업데이트 여부를 의심한다.
-
(서술형 선택지의 장단점) 서술형 선택지는 숫자 별점에서 오던 관대함 편향(부담을 피하려 무조건 높은 점수를 주는 경향)을 줄인다는 장점이 있다 — 각 문장이 구체적인 경험을 묘사해 "괜찮았지만 뛰어나지 않았다"처럼 중간 평가를 부담 없이 고를 수 있게 한다. 반면 새로운 문제도 생길 수 있다 — 문장이 길어지면 사용자가 다 읽지 않고 아무거나 고르는 무작위성이 늘 수 있고, 문구를 다국어로 번역하거나 여러 애플리케이션에 일관되게 적용하기가 숫자 별점보다 훨씬 어려워 설계·유지보수 비용이 커진다.
클릭하거나 Space를 눌러 뒤집기